<?php

class Admin_FilterController extends Zend_Controller_Action {

    const ROL_ALUMNO = 1;

    protected $_pattern;
    protected $_default_messages;

    public function preDispatch() {
        // Autenticacion del usuario
        $auth = Zend_Auth::getInstance();
        if (!$auth->hasIdentity()) {
            $this->_helper->layout->disableLayout();
            $this->_forward("index", "index", "");
        } else {
            $identity = $auth->getIdentity();
            if ($identity['tipo_usuario'] != VirtualLabs_Admin_Usuario::ROL_ADMIN) {
                $this->_redirect('/');
            }
        }
    }

    public function init() {
        $this->_helper->viewRenderer->setNoRender(true);
        $this->_helper->layout->disableLayout();
        $this->_default_messages = Zend_Registry::get('default_messages');
    }

    public function getareasacademicasAction() {
        $areaAdmin = new VirtualLabs_Admin_AreaAcademica();
        $response = $areaAdmin->getAreasAcademicas(array("codigo_area_academica", "nombre"));
        $retorno = '';
        foreach ($response as $value) {
            $retorno .= '<option value="' . $value['codigo_area_academica'] . '">' . $value['nombre'] . '</option>';
        }
        echo $retorno;
    }

    public function getteachersAction() {
        $profesor = new VirtualLabs_Admin_Usuario();
        $codigoLaboratorio = $this->getRequest()->getParam('codigo_laboratorio');
        $response = array('profes' => '', 'profes_asociados' => '');
        $lista = $profesor->getProfesoresNoAsociados(array('u.username', 'u.nombre', 'u.apellido'));
        $listaProfes = array();
        foreach ($lista as $profe) {
            $listaProfes[$profe['username']] = "{$profe['nombre']} {$profe['apellido']}";
        }
        $listaProfesAsociados = array();
        if ($codigoLaboratorio) {
            $lista = $profesor->getProfesoresAsociados(array('u.username', 'u.nombre', 'u.apellido'), array('codigo_laboratorio' => array('criteria' => '=', 'value' => $codigoLaboratorio)));
            foreach ($lista as $profe) {
                $listaProfesAsociados[$profe['username']] = "{$profe['nombre']} {$profe['apellido']}";
            }
            foreach (@$listaProfesAsociados as $key => $value) {
                $response['profes_asociados'] .= '<option value="' . $key . '">' . utf8_encode($value) . '</option>';
            }
        }
        $listaProfesores = array_diff_key($listaProfes, $listaProfesAsociados);

        foreach ($listaProfesores as $key => $value) {
            $response['profes'] .= '<option value="' . $key . '">' . utf8_encode($value) . '</option>';
        }

        echo Zend_Json_Encoder::encode($response);
    }

    public function getcursosbyareaAction() {
        $area = $this->getParam('codigo_area_academica');
        $curso = $this->getParam('codigo_curso');
        $cursoModel = new Application_Model_Mapper_Curso();
        if ($area == -1) {
            $val = $cursoModel->fetchAll();
        } else {
            $val = $cursoModel->findByField("codigo_area_academica", $area);
        }
        $cursos = '<option value="-1">' . $this->_default_messages->input_select_select . '</option>';
        foreach ($val as $value) {
            $tmp = $value->toArray();
            if ($curso != -1 && $curso == $tmp['codigo_curso']) {
                $cursos .= '<option selected value="' . $tmp['codigo_curso'] . '">' . $tmp['nombre'] . '</option>';
            } else {
                $cursos .= '<option value="' . $tmp['codigo_curso'] . '">' . $tmp['nombre'] . '</option>';
            }
        }
        echo $cursos;
    }

    public function getstudentbylabAction() {
        $logger = Zend_Registry::get(VirtualLabs_Common::DEBUG_LOG);

        $codigoLaboratorio = $this->getRequest()->getParam('codigo_laboratorio');
        $codigoVM = $this->getRequest()->getParam('codigo_vm');
        $logger->debug("codigo lab: " . $codigoLaboratorio);
        //obtener mienbros del laboratorio del tipo alumno        
        $mlDao = new VirtualLabs_Admin_MiembroLaboratorio();
        $miembrosLab = $mlDao->getMiembrosLaboratorioAlumno(array('codigo_laboratorio', 'username', 'codigo_rol'), array('codigo_laboratorio' => array('criteria' => '=', 'value' => $codigoLaboratorio),
            'codigo_rol' => array('criteria' => '=', 'value' => Admin_FilterController::ROL_ALUMNO)));
        $logger->debug("miembros lab: " . print_r($miembrosLab, TRUE));

        //por cada registro obtener el email y codigo de alumno para asociar a la maquina virtual
        $listaAlumnos = array();
        $optionAlumnos['from'] = '';
        $optionAlumnos['to'] = '';
        $userDao = new VirtualLabs_Admin_Usuario();
        foreach ($miembrosLab as $ml) {
            $alumno = $userDao->getUsuario(array('username', 'nombre', 'apellido'), array('username' => array('criteria' => '=', 'value' => $ml['username'])));
            $listaAlumnos[$alumno['username']] = "{$alumno['nombre']} {$alumno['apellido']} ({$alumno['username']})";
        }
        $logger->debug("options: " . print_r($listaAlumnos, TRUE));
        $logger->debug("codigo vm: " . $codigoVM);
        $usuariosAsignados = $userDao->getUsuariosByVM(array('codigo_maquina_virtual', 'username'), array('codigo_maquina_virtual' => array('criteria' => '=', 'value' => $codigoVM)));
        $listaAlumnosAsignados = array();
        foreach ($usuariosAsignados as $user) {
            $alumno = $userDao->getUsuario(array('username', 'nombre', 'apellido'), array('username' => array('criteria' => '=', 'value' => $user['username'])));
            $listaAlumnosAsignados[$alumno['username']] = "{$alumno['nombre']} {$alumno['apellido']} ({$alumno['username']})";
            $optionAlumnos['to'] .= '<option value="' . $alumno['username'] . '">' . $alumno['nombre'] . ' '
                    . $alumno['apellido'] . ' (' . $alumno['username'] . ')' . '</option>';
        }
        $listaFrom = array_diff_key($listaAlumnos, $listaAlumnosAsignados);

        foreach ($listaFrom as $key => $value) {
            $optionAlumnos['from'] .= '<option value="' . $key . '">' . utf8_encode($value) . '</option>';
        }

        echo Zend_Json_Encoder::encode($optionAlumnos);
    }

    public function getassignstudentAction() {
        $codigoVM = $this->getRequest()->getParam('codigo_maquina_virtual');
        $userDao = new VirtualLabs_Admin_Usuario();
        try {
            $usuariosAsignados = $userDao->getUsuariosByVM(array('codigo_maquina_virtual', 'username'), array('codigo_maquina_virtual' => array('criteria' => '=', 'value' => $codigoVM)));
            $return = array();
            foreach ($usuariosAsignados as $user) {
                $alumno = $userDao->getUsuario(array('username', 'nombre', 'apellido'), array('username' => array('criteria' => '=', 'value' => $user['username'])));
                $return['htmltext'] .= "<li>{$alumno['nombre']} {$alumno['apellido']} ({$alumno['username']})</li>\n";
            }
            $return['result'] = 'ok';
        } catch (Exception $exc) {
            $return['result'] = 'error';
            $return['message'] = $exc->getMessage();
        }
        echo Zend_Json_Encoder::encode($return);
    }

}